#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

#ifdef SHORT_BENCH
char exampleData[] = {'0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\n',\
'2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\n',\
'2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\n',\
'2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\n',\
'2', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\n',\
'1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\n',\
'0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\n',\
'1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\n',\
'0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\n',\
'0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\n',\
'2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\n',\
'1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\n',\
'2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\n',\
'1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\n',\
'0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\n',\
'2', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\n',\
'0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\n',\
'1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\n',\
'1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\n',\
'2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\n',\
'0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\n',\
'0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'0', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\n',\
'2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\n',\
'2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\n',\
'2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\n',\
'2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\n',\
'1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\n',\
'0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\n',\
'1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\n',\
'1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\n',\
'2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\n',\
'1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\n',\
'0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\n',\
'1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\n',\
'2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\n',\
'1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\n',\
'0', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\n',\
'0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\n',\
'0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\n',\
'\x0'};
#else
char exampleData[] = {'0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\n',\
'2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\n',\
'2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\n',\
'2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\n',\
'2', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\n',\
'1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\n',\
'0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\n',\
'1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\n',\
'0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\n',\
'0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\n',\
'2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\n',\
'1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\n',\
'2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\n',\
'1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\n',\
'0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\n',\
'2', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\n',\
'0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\n',\
'1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\n',\
'1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\n',\
'2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\n',\
'0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\n',\
'0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'0', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\n',\
'2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\n',\
'2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\n',\
'2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\n',\
'2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\n',\
'1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\n',\
'0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\n',\
'1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\n',\
'1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\n',\
'2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\n',\
'1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\n',\
'0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\n',\
'1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\n',\
'2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\n',\
'1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\n',\
'0', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\n',\
'0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\n',\
'0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\n',\
'1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\n',\
'1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\n',\
'2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\n',\
'0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\n',\
'2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\n',\
'0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\n',\
'0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\n',\
'1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\n',\
'2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\n',\
'1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\n',\
'1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'2', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\n',\
'1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\n',\
'0', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\n',\
'0', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\n',\
'0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\n',\
'1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\n',\
'2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\n',\
'1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\n',\
'0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\n',\
'0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\n',\
'0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\n',\
'2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\n',\
'0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\n',\
'1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\n',\
'1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\n',\
'1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\n',\
'2', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\n',\
'1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\n',\
'0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\n',\
'0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\n',\
'1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\n',\
'2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\n',\
'2', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\n',\
'2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\n',\
'1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\n',\
'0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\n',\
'2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\n',\
'2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'2', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\n',\
'0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\n',\
'2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\n',\
'2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\n',\
'1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\n',\
'0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\n',\
'2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\n',\
'2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\n',\
'1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\n',\
'1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\n',\
'1', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\n',\
'2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\n',\
'1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\n',\
'1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\n',\
'1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\n',\
'2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\n',\
'1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\n',\
'0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\n',\
'0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\n',\
'1', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\n',\
'0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\n',\
'1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\n',\
'0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\n',\
'0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\n',\
'2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\n',\
'0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\n',\
'0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\n',\
'2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\n',\
'2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\n',\
'2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\n',\
'2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\n',\
'1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\n',\
'1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\n',\
'0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\n',\
'0', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\n',\
'2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\n',\
'0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\n',\
'0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\n',\
'2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\n',\
'2', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'0', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'0', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\n',\
'0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\n',\
'1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\n',\
'1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\n',\
'0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\n',\
'1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\n',\
'0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\t', '0', '\n',\
'1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\n',\
'2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\n',\
'0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '0', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\n',\
'2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\n',\
'0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '2', '\t', '0', '\n',\
'0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\n',\
'1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '1', '\t', '1', '\t', '2', '\t', '1', '\t', '1', '\t', '2', '\t', '0', '\t', '0', '\t', '2', '\t', '2', '\t', '1', '\t', '0', '\n',\
'0', '\t', '1', '\t', '0', '\t', '0', '\t', '1', '\t', '0', '\t', '0', '\t', '2', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\n',\
'0', '\t', '1', '\t', '0', '\t', '1', '\t', '1', '\t', '1', '\t', '0', '\t', '2', '\t', '0', '\t', '1', '\t', '0', '\t', '1', '\t', '2', '\t', '0', '\t', '2', '\t', '1', '\t', '2', '\t', '2', '\t', '0', '\t', '2', '\t', '0', '\n',\
'\x0'};
#endif

#ifdef __cplusplus
extern "C" {
#endif

/* Changing these typedefs changes the capabilities of the library.  If one
 * needs more than 256 variable levels, for instance, he can change MDRDatum
 * to unsigned short.  The disadvantages of larger types is that they take
 * more memory and can slow down the library.  The current typedefs have been
 * set to what seem to be reasonable defaults. */

typedef unsigned char MDRDatum;
typedef unsigned int MDRAttribute;
typedef unsigned short MDRInstance;
typedef float MDRRatio;
typedef float MDRFitness;

/* Special value that represents an unknown datum.
 * This is defined as (MDRDatum)-1 .
 */
MDRDatum MDR_UNKNOWN = (MDRDatum)-1;
const char MDR_LIBRARY_VERSION[] = "0.3.3";

/* Structure to hold a set of data to analyze. */
typedef struct {
    MDRDatum *data;
    MDRDatum *n_levels;
    MDRInstance *n_status;
    MDRInstance rows;
    MDRAttribute cols;
} MDRDataSet;

/* ctor and dtor */
void MDR_dataset_init(MDRDataSet *d);
void MDR_dataset_release(MDRDataSet *d);

/* Convenience function to read a dataset from a file.  The format is
 * whitespace-delimited values, with the last column being the status column.
 * All values must be integers in the range [0,n) where n is the number of
 * levels for that column.  This function is provided for convenience only.
 * If a different format is required, the data set may be loaded manually.
*/
void MDR_dataset_read(MDRDataSet *d, char * dataPtr);

/* Get a pointer to a data row, given its index. */
#define MDR_dataset_get_row(_DATA_,_ROW_) \
    ((_DATA_)->data + (_ROW_) * (_DATA_)->cols)

/* Get a value from the data set, given row and column indices. */
#define MDR_dataset_get(_DATA_,_ROW_,_COL_) \
    (*(MDR_dataset_get_row(_DATA_,_ROW_) + (_COL_)))

/* Get the number of levels for a column, given its index. */
#define MDR_dataset_get_col_n_levels(_DATA_,_COL_) \
    (*((_DATA_)->n_levels + (_COL_)))

/* Get the status value for a row index. */
#define MDR_dataset_get_row_status(_DATA_,_ROW_) \
    MDR_dataset_get(_DATA_,_ROW_,(_DATA_)->cols - 1)

/* A data type designed to convert between multidimensional array indices and
 * flat array indices. */
typedef struct {
    size_t *dims;
    size_t n_dims;
    size_t size;
} MDRMultiIndex;

/* Represents a model and any analysis which has been performed on it. */
typedef struct {
    MDRAttribute n_attr;
    MDRAttribute *attr;
    MDRInstance *cell_counts;
    MDRDatum *cell_status;
    MDRMultiIndex index;
    MDRDatum n_status;
} MDRModel;

/* ctor and dtor */
void MDR_model_init(MDRModel *m);
void MDR_model_release(MDRModel *m);

/* Assign an attribute combination to a model.  The attribute combination is
 * copied.
 */
void MDR_model_set_attr(MDRModel *m,const MDRAttribute *attr,
    MDRAttribute n_attr);

/* Counts the number of instances in each cell, broken up by actual
 * status.  The analysis may be limited to a subset of the dataset by
 * passing an array of row indices in the rows parameter and the number
 * of rows in n_rows.  The subset can be excluded instead by setting the
 * exclude parameter to a nonzero value. To use the entire dataset, simply
 * pass NULL and 0, respectively.  If the analysis respects missing values,
 * a pointer to array of MDRInstance, one for each status, is required to
 * keep track of how many instances of each status were skipped.  Pass this
 * into the skipped parameter, if it's required.
 */
void MDR_model_build_cell_counts(MDRModel *m,const MDRDataSet *d,
    const MDRInstance *rows,MDRInstance n_rows,int exclude,
    MDRInstance *skipped);

/* Computes the predicted status for each cell in the model based on the
 * counts in the cells. In the event of ties, the cell is assigned the
 * lowest valued status of the tied statuses.  To alter this behavior,
 * pass an array of statuses in the tiePriority parameter, in the order
 * in which you want to break ties.  The length of this array must be
 * equal to the number of statuses in the complete data set, and have
 * exactly one entry for each status.  If the analysis respects missing values,
 * a const pointer to array of MDRInstance that contains counts of how many
 * instances per status were skipped is required.  Pass this into the skipped
 * parameter.
 */
void MDR_model_build_cell_statuses(MDRModel *m,const MDRDataSet *d,
    const MDRInstance *skipped,const MDRDatum *tiePriority);

/* Compute the confusion matrix for the model.
 * To compute the confusion matrix, pass a buffer of MDRInstance's
 * of length (m->n_status * m->n_status).  The actual status is the
 * row index, and the predicted status is the column index.
 */
void MDR_model_compute_confusion_matrix(MDRModel *m,const MDRDataSet *d,
    MDRInstance *conf_matrix);

/* Construct a new attribute based on the cells of a model.
 * To compute the attribute, pass a buffer of MDRDatum's of length n_rows.
 */
void MDR_model_construct_attribute(MDRModel *m,const MDRDataSet *d,
    const MDRInstance *rows,MDRInstance n_rows,int exclude,MDRDatum *attrib);

/* Transfers ownership of the source model's data to the destination model.
 * Releases the source model afterwards. */
void MDR_model_assign(MDRModel *dest,MDRModel *src);

/* Clears the cell data of a model while retaining all other data */
void MDR_model_clear_cells(MDRModel *m);

/* Clears the cell count data of a model while retaining all other data */
void MDR_model_clear_cell_counts(MDRModel *m);

/* Clears the cell status data of a model while retaining all other data */
void MDR_model_clear_cell_statuses(MDRModel *m);

/* Structure to iterate through the cells of the model. */
typedef struct {
    const MDRModel *m;
    size_t i;
} MDRModelIterator;

/* Initialize an iterator to point to the first cell in the model. */
void MDR_model_begin(const MDRModel *m,MDRModelIterator *i);

/* Get the cell key to which an iterator points. */
void MDR_model_get_key(const MDRModelIterator *i,size_t *key);

/* Get counts for the cell to which an iterator points. */
MDRInstance *MDR_model_get_cell_counts(const MDRModelIterator *i);

/* Get status for the cell to which an interator points. */
MDRDatum MDR_model_get_cell_status(const MDRModelIterator *i);

/* Increment an iterator to point to the next cell in the model. */
void MDR_model_next(MDRModelIterator *i);

/* Check to see if an iterator has reached the end of the model. */
int MDR_model_is_end(const MDRModelIterator *i);

/* ctor and dtor */
void MDR_multiindex_init(MDRMultiIndex *m,const size_t *dims,
    size_t n_dims);
void MDR_multiindex_release(MDRMultiIndex *m);

/* Transfers ownership of the source indexer's data to the destination indexer.
 * Releases the source indexer afterwards. */
void MDR_multiindex_assign(MDRMultiIndex *dest,MDRMultiIndex *src);

/* Convert multidimensional indices into a flat index.  Returns (size_t)-1 for
   out of bounds input. */
size_t MDR_multiindex_encode(const MDRMultiIndex *m,const size_t *indices);

/* Convert a flat index into multidimensional indices. */
void MDR_multiindex_decode(const MDRMultiIndex *m,size_t index,size_t *indices);

/* Growable array.  Members capacity and size are in multiples of elemsize. */
typedef struct {
    size_t capacity;
    size_t size;
    size_t elemsize;
    void *data;
} MDRVector;

/* ctor and dtor */
void MDR_vector_init(MDRVector *v,size_t elemsize,size_t init_cap);
void MDR_vector_release(MDRVector *v);

/* Like MDR_vector_release(), but doesn't free the memory, to which it returns
 * a pointer. */
void *MDR_vector_detach(MDRVector *v);

/* Transfers ownership of the source vector's data to the destination vector.
 * Releases the source vector afterwards. */
void MDR_vector_assign(MDRVector *dest,MDRVector *src);

/* Add several items at once to the vector.  The elements are copied. */
void *MDR_vector_add_array(MDRVector *v,const void *array,size_t n);

/* Add one item to the vector. */
#define MDR_vector_add(_VECTOR_,_ITEM_) \
    MDR_vector_add_array(_VECTOR_,_ITEM_,1)

/* Resizes the allocated memory to at least the given capacity, in multiples
 * of elemsize. */
void MDR_vector_ensure_capacity(MDRVector *v,size_t capacity);

/* Changes the number of elements held by the vector.  This does not release
 * any memory.  If elements are added, they are initialized to zero. */
void MDR_vector_resize(MDRVector *v,size_t size);

/* Free any excess memory held by the vector. */
void MDR_vector_trim(MDRVector *v);

/* Gets the specified element from the vector. */
#define MDR_vector_get(_VECTOR_,_INDEX_) \
    ((void*)((char*)(_VECTOR_)->data + ((_INDEX_) * (_VECTOR_)->elemsize)))

/* Checks to see if the vector is empty. */
#define MDR_vector_is_empty(_VECTOR_) \
    ((_VECTOR_)->size == 0)

/* Sets the vector to empty, but does not free any memory. */
#define MDR_vector_clear(_VECTOR_) \
    MDR_vector_resize(_VECTOR_,0)

#ifdef __cplusplus
} /* extern "C" */
#endif

/********************************************************************************/
/************* End of header files, now inserting the functions body ************/

void MDR_PRIVATE_dataset_finish_row(MDRDataSet *d,MDRVector *data,MDRVector *sc)
{
    MDRAttribute i;
    MDRDatum status;

    if (d->cols == 0)
    {
        d->cols = data->size;
        d->n_levels = (MDRDatum*)malloc(sizeof(MDRDatum) * (d->cols));
        memset(d->n_levels,0,sizeof(MDRDatum) * (d->cols));
    }

    for (i = 0; i < d->cols; ++i)
    {
        MDRDatum datum = *(MDRDatum*)MDR_vector_get(data,d->cols * d->rows +
            i);

        if (datum == MDR_UNKNOWN)
            continue;

        if (datum >= d->n_levels[i])
            d->n_levels[i] = datum + 1;
    }

    status = *(MDRDatum*)MDR_vector_get(data,data->size - 1);

    if (sc->size < status+1)
        MDR_vector_resize(sc,status+1);

    ++(*(MDRInstance*)MDR_vector_get(sc,status));
    ++d->rows;
}

void MDR_dataset_init(MDRDataSet *d)
{
    d->data = d->n_levels = NULL;
    d->n_status = NULL;
    d->rows = 0;
    d->cols = 0;
}

void MDR_dataset_read(MDRDataSet *d, char * dataPtr)
{
    const char null = '\0';
    MDRVector data;
    MDRVector word;
    MDRVector sc;
    MDRDatum datum;
    int isrow = 0;
    int i;
    int dataIndex = 0;

    MDR_vector_init(&data,sizeof(MDRDatum),16);
    MDR_vector_init(&word,sizeof(char),4);
    MDR_vector_init(&sc,sizeof(MDRInstance),2);
    MDR_dataset_release(d);

    while ((i = dataPtr[dataIndex]) != '\x0')
    {
        dataIndex++;
        if (isspace(i))
        {
            if (word.size)
            {
                MDR_vector_add(&word,&null);
                datum = (MDRDatum)atoi((char*)word.data);
                MDR_vector_clear(&word);
                MDR_vector_add(&data,&datum);
                isrow = 1;
            }

            if (isrow && i == '\n')
            {
                MDR_PRIVATE_dataset_finish_row(d,&data,&sc);
                isrow = 0;
            }
        }
        else
        {
            char c = (char)i;
            MDR_vector_add(&word,&c);
        }
    }

    if (word.size)
    {
        MDR_vector_add(&word,&null);
        datum = (MDRDatum)atoi((char*)word.data);
        MDR_vector_clear(&word);
        MDR_vector_add(&data,&datum);
        MDR_PRIVATE_dataset_finish_row(d,&data,&sc);
    }

    MDR_vector_release(&word);
    d->data = (MDRDatum*)MDR_vector_detach(&data);
    d->n_status = (MDRInstance*)MDR_vector_detach(&sc);
}

void MDR_dataset_release(MDRDataSet *d)
{
    if (!d)
        return;

    free(d->data);
    free(d->n_levels);
    free(d->n_status);
    d->data = d->n_levels = NULL;
    d->n_status = NULL;
    d->rows = 0;
    d->cols = 0;
}

void MDR_PRIVATE_model_init_cells(MDRModel *m,const MDRDataSet *d)
{
    MDRDatum *cur;
    size_t *values;
    size_t i;

    MDR_model_clear_cells(m);

    /* compute dimensions for and initialize multi-index */
    values = (size_t*)malloc(sizeof(size_t) * m->n_attr);

    for (i = 0; i < m->n_attr; ++i)
        values[i] = d->n_levels[m->attr[i]];

    MDR_multiindex_init(&m->index,values,m->n_attr);
    free(values);

    /* get number of statuses for model */
    m->n_status = d->n_levels[d->cols - 1];

    /* allocate and initialize space for cell counts */
    m->cell_counts = (MDRInstance*)malloc(sizeof(MDRInstance) * m->n_status *
        m->index.size);
    memset(m->cell_counts,0,sizeof(MDRInstance) * m->n_status * m->index.size);

    /* allocate and initialize space for cell statuses */
    m->cell_status = (MDRDatum*)malloc(sizeof(MDRDatum) * m->index.size);

    /* not using memset because MDRDatum may be defined to be larger
     * than a byte */
    for (i = 0,cur = m->cell_status; i < m->index.size; ++i,++cur)
        *cur = MDR_UNKNOWN;
}

int MDR_PRIVATE_model_build_cells_instance(MDRModel *m,const MDRDataSet *d,
    MDRInstance row,MDRInstance *skipped,size_t *values)
{
    /* get row status */
    MDRDatum status = MDR_dataset_get_row_status(d,row);

    int skip = 0;
    size_t cellid;
    MDRAttribute j;

    /* if the row status is unknown, this instance is useless, so go to
     * the next one */
    if (status == MDR_UNKNOWN)
        return 1;

    /* get the genotype combination from the data set */
    for (j = 0; j < m->n_attr; ++j)
    {
        values[j] = (size_t)MDR_dataset_get(d,row,m->attr[j]);

        /* check to see if this instance should be skipped */
        if (values[j] == MDR_UNKNOWN)
        {
            if (skipped)
                ++skipped[status];
            skip = 1;
            break;
        }
    }

    /* if at least one of the values in the cell key is unknown,
     * then skip this instance for this model */
    if (skip)
        return 1;

    /* convert cell key to linear array index */
    cellid = MDR_multiindex_encode(&m->index,values);

    /* SHOULDN'T HAPPEN: if multi-index key is out of bounds, abort loop */
    if (cellid == (size_t)-1)
        return 0;

    /* update the appropriate cell */
    ++m->cell_counts[cellid * m->n_status + status];

    /* return true to continue loop */
    return 1;
}

int MDR_PRIVATE_model_construct_attribute_instance(MDRModel *m,
    const MDRDataSet *d,MDRInstance row,MDRDatum *attrib,size_t *values)
{
    int skip = 0;
    MDRDatum predicted;
    size_t cellid;
    MDRAttribute j;

    /* get the genotype combination from the data set */
    for (j = 0; j < m->n_attr; ++j)
    {
        values[j] = (size_t)MDR_dataset_get(d,row,m->attr[j]);

        /* check to see if this instance should be skipped */
        if (values[j] == MDR_UNKNOWN)
        {
            skip = 1;
            break;
        }
    }

    /* if at least one of the values in the cell key is unknown,
     * then skip this instance for this model */
    if (skip)
    {
        if (attrib)
            *attrib = MDR_UNKNOWN;
        return 1;
    }

    /* convert cell key to linear array index */
    cellid = MDR_multiindex_encode(&m->index,values);

    /* SHOULDN'T HAPPEN: if multi-index key is out of bounds, abort loop */
    if (cellid == (size_t)-1)
        return 0;

    /* get prediction for current cell */
    predicted = m->cell_status[cellid];

    /* add predicted status to constructed attribute */
    if (attrib)
        *attrib = predicted;

    /* return true to continue loop */
    return 1;
}

void MDR_model_init(MDRModel *m)
{
    MDR_multiindex_init(&m->index,NULL,0);
    m->cell_counts = NULL;
    m->cell_status = NULL;
    m->n_attr = 0;
    m->attr = NULL;
}

void MDR_model_set_attr(MDRModel *m,const MDRAttribute *attr,
    MDRAttribute n_attr)
{
    MDR_model_clear_cells(m);

    if (m->n_attr != n_attr)
        m->attr = (MDRAttribute*)realloc(m->attr,
            sizeof(MDRAttribute) * n_attr);

    memcpy(m->attr,attr,sizeof(MDRAttribute) * n_attr);
    m->n_attr = n_attr;
}

void MDR_model_build_cell_counts(MDRModel *m,const MDRDataSet *d,
    const MDRInstance *rows,MDRInstance n_rows,int exclude,
    MDRInstance *skipped)
{
    size_t *values;
    MDRInstance i;

    if (!m->cell_counts)
        MDR_PRIVATE_model_init_cells(m,d);
    else
        memset(m->cell_counts,0,sizeof(MDRInstance) * m->n_status *
            m->index.size);

    /* allocate space for a genotype combination for use as a cell key */
    values = (size_t*)malloc(sizeof(size_t) * m->n_attr);

    /* initialize space to keep track of how many instances for
     * each status were skipped */
    if (skipped)
        memset(skipped,0,sizeof(MDRInstance) * m->n_status);

    /* loop over appropriate rows and include each in cell building process */
    if (!n_rows || !exclude)
    {
        n_rows = rows ? n_rows : d->rows;

        for (i = 0; i < n_rows; ++i)
            if (!MDR_PRIVATE_model_build_cells_instance(m,d,rows ? rows[i] : i,
                skipped,values))
                break;
    }
    else
    {
        size_t excl = 0;

        for (i = 0; i < d->rows; ++i)
        {
            if (excl < n_rows && rows[excl] == i)
            {
                ++excl;
                continue;
            }

            if (!MDR_PRIVATE_model_build_cells_instance(m,d,i,skipped,values))
                break;
        }
    }

    /* deallocate cell key */
    free(values);
}

void MDR_model_build_cell_statuses(MDRModel *m,const MDRDataSet *d,
    const MDRInstance *skipped,const MDRDatum* tiePriority)
{
    MDRInstance *counts;
    size_t j;

    /* loop over cells to build cell statuses */
    for (j = 0,counts = m->cell_counts; j < m->index.size;
        ++j,counts += m->n_status)
    {
        int empty = 1;
        MDRDatum i;

        /* check to see if cell is empty */
        for (i = 0; i < m->n_status && empty; ++i)
            if (counts[i])
                empty = 0;

        /* assign unknown status to empty cells */
        if (empty)
            m->cell_status[j] = MDR_UNKNOWN;
        /* compute status for non-empty cells */
        else
        {
            MDRRatio maxWeight = 0;
            MDRDatum maxStatus = MDR_UNKNOWN;

            /* loop over statuses in tiePriority order, if available,
               otherwise, in numerical order */
            for (i = 0; i < m->n_status; ++i)
            {
                MDRDatum status = tiePriority ? tiePriority[i] : i;
                MDRRatio weight;

                /* if there are no instances in the data with the current
                 * status, then go to the next status */
                if (!d->n_status[status])
                    continue;

                /* calculate the weight for this status and check to see if
                   it's the largest */
                weight = skipped ? (MDRRatio)counts[status] /
                    (d->n_status[status] - skipped[status]) :
                    (MDRRatio)counts[status] / d->n_status[status];

                if (weight > maxWeight)
                {
                    maxWeight = weight;
                    maxStatus = status;
                }
            }

            /* store the cell status with the heighest weight */
            m->cell_status[j] = maxStatus;
        }
    }
}

void MDR_model_compute_confusion_matrix(MDRModel *m,const MDRDataSet *d,
    MDRInstance *conf_matrix)
{
    MDRInstance *counts;
    size_t i;

    /* if no results are requested, bail out early */
    if (!conf_matrix)
        return;

    /* clear the confusion matrix, if one is provided */
    memset(conf_matrix,0,sizeof(MDRInstance)*m->n_status*m->n_status);


    /* loop over cells to get confusion matrix counts */
    for (i = 0,counts = m->cell_counts; i < m->index.size;
        ++i,counts += m->n_status)
    {
        MDRDatum j;
        /* don't count unknown cells */
        if (m->cell_status[i] == MDR_UNKNOWN)
            continue;

        /* update appropriate confusion matrix cells */
        for (j = 0; j < m->n_status; ++j) {
            conf_matrix[j * m->n_status + m->cell_status[i]] += counts[j];
        }
    }
}

void MDR_model_construct_attribute(MDRModel *m,const MDRDataSet *d,
    const MDRInstance *rows,MDRInstance n_rows,int exclude,MDRDatum *attrib)
{
    size_t *values;
    MDRInstance i;

    /* if no results are requested, bail out early */
    if (!attrib)
        return;

    /* allocate space for a genotype combination for use as
     * a cell key */
    values = (size_t*)malloc(sizeof(size_t) * m->n_attr);

    /* loop over appropriate rows and include each in attribute construction
     * process */
    if (!n_rows || !exclude)
    {
        n_rows = rows ? n_rows : d->rows;

        for (i = 0; i < n_rows; ++i)
            if (!MDR_PRIVATE_model_construct_attribute_instance(m,d,
                rows ? rows[i] : i,attrib ? attrib + i : 0,values))
                break;
    }
    else
    {
        size_t excl = 0;
        MDRInstance inst = 0;

        for (i = 0; i < d->rows; ++i)
        {
            if (excl < n_rows && rows[excl] == i)
            {
                ++excl;
                continue;
            }

            if (!MDR_PRIVATE_model_construct_attribute_instance(m,d,i,
                attrib ? attrib + inst : 0,values))
                break;

            ++inst;
        }
    }

    /* deallocate cell key */
    free(values);
}

void MDR_model_assign(MDRModel *dest,MDRModel *src)
{
    MDR_model_release(dest);

    MDR_multiindex_assign(&dest->index,&src->index);
    dest->attr = src->attr;
    dest->n_attr = src->n_attr;
    dest->cell_counts = src->cell_counts;
    dest->cell_status = src->cell_status;
    dest->n_status = src->n_status;

    src->cell_counts = NULL;
    src->cell_status = NULL;
    src->attr = NULL;
    MDR_model_release(src);
}

void MDR_model_release(MDRModel *m)
{
    if (!m)
        return;

    MDR_model_clear_cells(m);

    free(m->attr);
    m->attr = NULL;
    m->n_attr = 0;
    m->n_status = 0;
}

void MDR_model_clear_cells(MDRModel *m)
{
    MDR_multiindex_release(&m->index);

    free(m->cell_counts);
    m->cell_counts = NULL;
    free(m->cell_status);
    m->cell_status = NULL;
    m->n_status = 0;
}

void MDR_model_clear_cell_counts(MDRModel *m)
{
    if (!m->cell_status)
        MDR_multiindex_release(&m->index);

    free(m->cell_counts);
    m->cell_counts = NULL;
    m->n_status = 0;
}

void MDR_model_clear_cell_statuses(MDRModel *m)
{
    if (!m->cell_counts)
        MDR_multiindex_release(&m->index);

    free(m->cell_status);
    m->cell_status = NULL;
}

void MDR_model_begin(const MDRModel *m,MDRModelIterator *i)
{
    i->m = m;
    i->i = 0;
}

void MDR_model_get_key(const MDRModelIterator *i,size_t *key)
{
    MDR_multiindex_decode(&i->m->index,i->i,key);
}

MDRInstance *MDR_model_get_cell_counts(const MDRModelIterator *i)
{
    return i->m->cell_counts + (i->i * i->m->n_status);
}

MDRDatum MDR_model_get_cell_status(const MDRModelIterator *i)
{
    return i->m->cell_status[i->i];
}

void MDR_model_next(MDRModelIterator *i)
{
    ++i->i;
}

int MDR_model_is_end(const MDRModelIterator *i)
{
    return i->i >= i->m->index.size;
}

void MDR_multiindex_init(MDRMultiIndex *m,const size_t *dims,size_t n_dims)
{
    size_t i;

    m->n_dims = n_dims;
    m->dims = (size_t*)malloc(n_dims * sizeof(size_t));
    memcpy(m->dims,dims,n_dims * sizeof(size_t));

    if (n_dims)
    {
        m->size = 1;

        for (i = 0; i < n_dims; ++i)
            m->size *= dims[i];
    }
    else
        m->size = 0;
}

void MDR_multiindex_release(MDRMultiIndex *m)
{
    if (!m)
        return;

    free(m->dims);
    m->dims = NULL;
    m->n_dims = 0;
    m->size = 0;
}

void MDR_multiindex_assign(MDRMultiIndex *dest,MDRMultiIndex *src)
{
    MDR_multiindex_release(dest);

    *dest = *src;
    src->dims = NULL;

    MDR_multiindex_release(src);
}

size_t MDR_multiindex_encode(const MDRMultiIndex *m,const size_t *indices)
{
    size_t index = 0;
    size_t i;

    for (i = 0; i < m->n_dims; ++i)
    {
        if (indices[i] >= m->dims[i])
            return (size_t)-1;

        index += indices[i];

        if (i + 1 < m->n_dims)
            index *= m->dims[i + 1];
    }

    return index;
}

void MDR_multiindex_decode(const MDRMultiIndex *m,size_t index,size_t *indices)
{
    size_t i;

    for (i = m->n_dims; i; --i)
    {
        size_t j = i - 1;
        indices[j] = index % m->dims[j];
        index /= m->dims[j];
    }
}

void MDR_vector_init(MDRVector *v,size_t elemsize,
    size_t init_cap)
{
    v->capacity = init_cap;
    v->elemsize = elemsize;
    v->size = 0;
    v->data = init_cap ? malloc(init_cap * elemsize) : NULL;
}

void *MDR_vector_add_array(MDRVector *v,const void *item,size_t n)
{
    void *target;

    MDR_vector_ensure_capacity(v,v->size + n);
    target = (char*)v->data + (v->size * v->elemsize);
    memcpy(target,item,n * v->elemsize);
    v->size += n;

    return target;
}

void MDR_vector_ensure_capacity(MDRVector *v,size_t capacity)
{
    if (v->capacity >= capacity)
        return;

    if (v->capacity)
        while (v->capacity < capacity)
            v->capacity <<= 1;
    else
        v->capacity = capacity << 1;

    v->data = realloc(v->data,v->capacity * v->elemsize);
}

void MDR_vector_resize(MDRVector *v,size_t size)
{
    size_t oldsize = v->size;

    MDR_vector_ensure_capacity(v,size);

    if (size > oldsize)
        memset((char*)v->data + v->size * v->elemsize,0,(size - v->size) *
            v->elemsize);

    v->size = size;
}

void MDR_vector_trim(MDRVector *v)
{
    v->capacity = v->size;
    v->data = realloc(v->data,v->capacity * v->elemsize);
}

void *MDR_vector_detach(MDRVector *v)
{
    void *data = v->data;

    v->data = NULL;
    v->size = v->elemsize = v->capacity = 0;

    return data;
}

void MDR_vector_assign(MDRVector *dest,MDRVector *src)
{
    MDR_vector_release(dest);

    dest->size = src->size;
    dest->elemsize = src->elemsize;
    dest->capacity = src->capacity;
    dest->data = MDR_vector_detach(src);
}

void MDR_vector_release(MDRVector *v)
{
    if (!v)
        return;

    free(v->data);
    v->data = NULL;
    v->size = v->elemsize = v->capacity = 0;
}


/*******************************************************************************/

/* example1.c - An example showing a single model being analyzed and the
 * results printed. */

/* Algorithm parameters. */
static const char datafile[] = "/home/luke/tmp/libmdr/data/MDR-SampleData.txt";
static const MDRAttribute attr[] = { 0, 5, 7 };

/* Function headers. */
void print_combo(FILE *out,const MDRAttribute *attr,MDRAttribute n_attr);
void print_model(FILE *out,MDRModel *m);
void print_attribute(FILE *out,const MDRDatum *attribute,MDRInstance n_rows);
void print_conf_matrix(FILE *out,MDRInstance *conf_matrix,MDRDatum n_status);
float balanced_accuracy(MDRInstance *conf_matrix,MDRDatum n_status);

int main(int argc, char * argv[]){
    MDRDataSet d;
    MDRModel m;
    MDRDatum *new_attr;
    MDRInstance *conf_matrix;

    /* initialize and read data set */
    fprintf(stderr,"Initializing dataset\n");
    MDR_dataset_init(&d);
    fprintf(stderr,"Reading dataset\n");
    MDR_dataset_read(&d, exampleData);
    fprintf(stderr,"Closing input file\n");

    /* initialize and train model */
    fprintf(stderr,"Initializing model\n");
    MDR_model_init(&m);
    fprintf(stderr,"Setting model attributes\n");
    MDR_model_set_attr(&m,attr,sizeof(attr) / sizeof(attr[0]));
    fprintf(stderr,"Cell counts\n");
    MDR_model_build_cell_counts(&m,&d,NULL,0,0,NULL);
    fprintf(stderr,"Cell statuses\n");
    MDR_model_build_cell_statuses(&m,&d,NULL,NULL);

    /* compute the confusion matrix */
    fprintf(stderr,"Initializing confusion matrix\n");
    conf_matrix = (MDRInstance*)malloc(sizeof(MDRInstance) * m.n_status *
        m.n_status);
    fprintf(stderr,"Computing confusion matrix\n");
    MDR_model_compute_confusion_matrix(&m,&d,conf_matrix);

    /* construct a new attribute */
    fprintf(stderr,"Initializing new attribute\n");
    new_attr = (MDRDatum*)malloc(sizeof(MDRDatum) * d.rows);
    fprintf(stderr,"Constructing new attribute\n");
    MDR_model_construct_attribute(&m,&d,NULL,0,0,new_attr);

    /* display results */
    fprintf(stderr,"Displaying results\n");
    print_combo(stderr,m.attr,m.n_attr);
    printf("%f",balanced_accuracy(conf_matrix,m.n_status));

    print_conf_matrix(stderr,conf_matrix,m.n_status);

    printf("\n");
    print_model(stderr,&m);
    printf("\n");
    print_attribute(stderr,new_attr,d.rows);
    printf("\n");

    /* release resources */
    fprintf(stderr,"Releasing resources\n");
    free(new_attr);
    free(conf_matrix);
    MDR_model_release(&m);
    MDR_dataset_release(&d);
    fprintf(stderr,"Return 0\n");

    return 0;
}

/* Print a list of attributes to a FILE*. */
void print_combo(FILE *out,const MDRAttribute *attr,MDRAttribute n_attr)
{
    MDRAttribute i;

    fprintf(out,"[");

    for (i = 0; i < n_attr; ++i)
        fprintf(out," %lu",(unsigned long)attr[i]);

    fprintf(out," ]");
}

/* Print a list of model cells to a FILE*. */
void print_model(FILE *out,MDRModel *m)
{
    size_t *key = (size_t*)malloc(sizeof(size_t) * m->n_attr);
    MDRModelIterator iter;

    /* iterate over the cells map in the model */
    for (MDR_model_begin(m,&iter); !MDR_model_is_end(&iter);
        MDR_model_next(&iter))
    {
        MDRInstance *counts = MDR_model_get_cell_counts(&iter);
        MDRDatum status = MDR_model_get_cell_status(&iter);
        MDRAttribute i;
        MDRDatum j;

        MDR_model_get_key(&iter,key);

        /* print the cell key */
        for (i = 0; i < m->n_attr; ++i)
        {
            if (i)
                fprintf(out,",");
            fprintf(out,"%lu",(unsigned long)key[i]);
        }

        /* print the cell counts */
        for (j = 0; j < m->n_status; ++j)
            fprintf(out,"\t%lu",(unsigned long)counts[j]);

        fprintf(out,"\t");

        if (status == MDR_UNKNOWN)
            fprintf(out,"?");
        else
            fprintf(out,"%lu",(unsigned long)status);

        fprintf(out,"\n");
    }

    free(key);
}

/* Print an attribute to a FILE*. */
void print_attribute(FILE *out,const MDRDatum *attribute,MDRInstance n_rows)
{
    MDRInstance i;

    for (i = 0; i < n_rows; ++i)
    {
        if (i)
            fprintf(out," ");

        if (attribute[i] == MDR_UNKNOWN)
            fprintf(out,"?");
        else
            fprintf(out,"%lu",(unsigned long)attribute[i]);
    }
}

/* Print a confusion matrix to a FILE*. */
void print_conf_matrix(FILE *out,MDRInstance *conf_matrix,MDRDatum n_status)
{
    MDRDatum i,j;

    for (i = 0; i < n_status; ++i)
    {
        for (j = 0; j < n_status; ++j)
        {
            if (j)
                fprintf(out,"\t");

            fprintf(out,"%lu",(unsigned long)conf_matrix[i * n_status + j]);
        }

        fprintf(out,"\n");
    }
}

/* Compute balanced accuracy from a confusion matrix */
float balanced_accuracy(MDRInstance *conf_matrix,MDRDatum n_status)
{
    MDRDatum i,j;
    float tpsum = 0.0;

    for (i = 0; i < n_status; ++i)
    {
        MDRInstance sum = 0;

        for (j = 0; j < n_status; ++j)
            sum += conf_matrix[i * n_status + j];
        /*printf("tpsum: %f\n", tpsum);
        printf("sum: %d\n", sum);*/
        tpsum += (float)conf_matrix[i * (n_status + 1)] / sum;
    }
    return tpsum / n_status;
}
